<?php
/****************************************************************
*                                                               *
*                차칸아이 포스트 부분 비밀글 보기               *
*                           V 1.6                               *
*                                                               *
*                   제작 : 2007년 5월 13일                      *
*                          http://chakani.net                   *
*                                                               *
****************************************************************/
/****************************************************************
*                                                               *
*                   수정 : 2008년 12월 4일                      *
*                          http://marung.cafe24.com/tc          *
*                          2008년 12월 31일                     *
*                          http://fall-leaf.net/blog/root/      *
*                                                               *
****************************************************************/

function CHAKANI_SECRET_SETCOOKIE($target){
  global $pluginURL, $configVal, $blog, $service;
  
  requireComponent('Textcube.Function.misc');
	$cfg = misc::fetchConfigVal( $configVal);

        $TSSESSION = "TSSESSION".$service['domain'].$service['path'];
        $TSSESSION = str_replace(".", "", $TSSESSION);
        $TSSESSION = str_replace("/", "", $TSSESSION);
        $TSSESSION = str_replace("-", "", $TSSESSION);

  // 언어 파일 설정
	$langdir = ROOT . "/plugins/CHAKANI_SECRETTEXT/lang/";
	if(empty($cfg['lang'])) $lang = $blog['language'];
	else $lang = $cfg['lang'];
	
	// 언어파일을 읽어들임
	if(is_file($langdir . $lang . ".php")) include_once($langdir . $lang . ".php");
	else{
		$lang = 'ko';
		$lang8 = '답변을 입력해주세요';
		$lang9 = '답변을 확인중입니다';
		$lang10 = '입력하신 답변은 일치하지 않는 답변입니다.';
		$lang11 = '접속을 할수없습니다.';
	}
	
	$CHAKANI_SECRET_Head .= ('
		<script type="text/javascript">
			var lang8 = "'.$lang8.'";
			var lang9 = "'.$lang9.'";
			var lang10 = "'.$lang10.'";
			var lang11 = "'.$lang11.'";
		</script>	
	');
  $CHAKANI_SECRET_Head .= '<script type="text/javascript" src="'.$pluginURL.'/chakani_secret_16.js"></script>'."\r\n";
  
  if(empty($_COOKIE['CHAKANI_SID'])||$_COOKIE['CHAKANI_SID']!=$_SESSION['CHAKANI_SID']){
    $CHAKANI_SID = md5(time().$_COOKIE[$TSSESSION].$_SERVER["REMOTE_ADDR"]);
    $_SESSION['CHAKANI_SID'] = $CHAKANI_SID;
    $CHAKANI_SECRET_Head .= ('
   	<script type="text/javascript">
   	  CHAKANI_SECRET_SetCookie("CHAKANI_SID", "'.$CHAKANI_SID.'");
   	</script> 
    ');	
  }
  return $target . $CHAKANI_SECRET_Head;
}

function CHAKANI_SECRETICON($target){
  global $pluginURL;
 
     $my_secret =('
      	<script type="text/javascript">
	    function AddSecret() {

		var isWYSIWYG = false;
		try {
			if(editor.editMode == "WYSIWYG")
			isWYSIWYG = true;
		} catch(e) { }

		var SecretBox = "[SECRET]<br />Q:<br />A:<br /><br /><br />[/SECRET]<br />";
//		TTCommand("Raw", SecretBox, "  ");
      editor.command("Raw", SecretBox, "");
		editor.trimContent();
	    }
	</script>
    ');

  $my_secret .= '<img src="'.$pluginURL.'/images/lock.gif"  width="16" height="16" border="0"  onclick="AddSecret();" style="cursor:pointer;vertical-align:middle;" alt="Secret Post" title="Secret Post" />&nbsp;&nbsp;';
  return $target . $my_secret;
}

function CHAKANI_SECRETRSS($target, $mother){

   $target = str_replace('onclick', 'noOnclick', $target);
   $target = str_replace('onkeydown', 'noOnkeydown', $target);
   return $target;
}

function CHAKANI_SECRETTEXT($target, $mother){
	global $configVal, $owner, $userid, $service;
	requireComponent('Textcube.Function.misc');
	$cfg = misc::fetchConfigVal( $configVal);

    $target = preg_replace("/\[\/?(?i)secret\]/", "[SECRET]", $target, -1);

	// 비밀글 코드가 들어있는지에대한 검사
	if(eregi("\[[/]*SECRET\]", $target)){
		$CH_Secret = explode('[SECRET]', $target);

        $TSSESSION = "TSSESSION".$service['domain'].$service['path'];
        $TSSESSION = str_replace(".", "", $TSSESSION);
        $TSSESSION = str_replace("/", "", $TSSESSION);
        $TSSESSION = str_replace("-", "", $TSSESSION);

    	$TEMP_CH_Secret[0] = $CH_Secret[0];
		for( $i=1; $i<count($CH_Secret); $i+=2) { 
		    $TEMP_CH_Secret[($i+1)/2] = $CH_Secret[$i]."[/SECRET]".$CH_Secret[$i+1]; 
		} 
		$CH_Secret = $TEMP_CH_Secret;

		$CH_i = count($CH_Secret) - 1;
		
		$Secret_out = $CH_Secret[0];			// 비밀글이 처음 발견되기 전의 내용

        if( strpos($_SERVER["REQUEST_URI"], "guestbook") !== false ){ 
            if ( !$_GET['page'] ) $mother = '1'.'G'.$mother['id'];
            else $mother = $_GET['page'].'G'.$mother['id'];
        }
        else if( strpos($_SERVER["REQUEST_URI"], "notice") !== false ){
            $mother = $mother.'N';
        }

        $cfg['mother'] = $mother;					// $mother 변수를 $cfg 에 넣는다.
		$STreei = 0;			// 패스워드가 일치하는 비밀글의 갯수
		$STree = '';			// 패스워드가 일치하는 비밀글의 번호
		$CodeOK = 0;			// 패스워드가 질문의 패스워드와 일치하는지 확인
		
		for($i=1; $i<=$CH_i; $i++){
			
			// 코드를 분석하여 Q와 암호화된A 를 찾아냄
			$myText = explode("[/SECRET]", $CH_Secret[$i]);
			$myText[0] = preg_replace("/<(?i)br *\/?>/", "<br />", $myText[0], -1);
			$myText[0] = preg_replace("/<(?i)p>/", "", $myText[0], -1);
			$myText[0] = str_replace("</P>", "</p>", $myText[0]);

			$myTmp = explode("<br />", $myText[0]);
			$cfg['myB'] = 1;

			$cfg['i'] = $i;
			if( (substr(trim($myTmp[1]),0,2) != "Q:" && substr(trim($myTmp[1]),0,2) != "q:") && (substr(trim($myTmp[2]),0,2) != "A:" && substr(trim($myTmp[2]),0,2) != "a:") ){
				$cfg['myB'] = 0;
				$myTmp = explode("</p>", $myText[0]);
			}

			$myQ = $cfg['myQ'] = trim($myTmp[1]);
			$myA = $cfg['myA'] = md5(addslashes(substr(trim($myTmp[2]),2)."_".$cfg['mother']."_".$cfg['i']).$_SERVER["REMOTE_ADDR"].$_COOKIE['CHAKANI_SID']);
			
			// 관리자로 로그인한 경우 인증없이 통과
			if($owner == $_SESSION['userid']){
				$Secret_out .= CHAKANI_SECRETOutForm($myText[0], $cfg, 1);
			}
			
			// A:root 인경우 비밀글 숨기기
			else if(eregi("A:root",trim($myTmp[2]))){
				$Secret_out .= CHAKANI_SECRETOutForm($myText[0], $cfg, 2);
			}
			
			// 간단한 보안 인증
			else if(empty($_COOKIE['CHAKANI_SID']) || $_COOKIE['CHAKANI_SID'] != $_SESSION['CHAKANI_SID'] || $_COOKIE[$TSSESSION] != session_id()){
				$Secret_out .= CHAKANI_SECRETOutForm($myText[0], $cfg, 0);
			}
			else{
				
				// 입력된 패스워드 암호화
				$asn = md5(addslashes(trim(urldecode($_COOKIE['CHAKANI_SECRET_Va']))).$_SERVER["REMOTE_ADDR"].$_COOKIE['CHAKANI_SID']);
				
				// 세션 인증 확인
				if(!empty($_SESSION['CHAKANI_SS'.$mother.'_'.$i]) && $_SESSION['CHAKANI_SS'.$mother.'_'.$i] == $myA){
					$Secret_out .= CHAKANI_SECRETOutForm($myText[0], $cfg, 1);
				}
				
				// 쿠키 인증을 통한 패스워드 확인
				else if($asn == $myA){
					// 인증에 성공할경우

					// 질문의 패스워드가 입력한 패스워드와 일치하는지 확인
					if(urldecode($_COOKIE['CHAKANI_SECRET_No']) == $mother.'_'.$i) $CodeOK = 1;
						
					$_SESSION['CHAKANI_SS'.$mother."_".$i] = $asn;			// 인증에 성공한경우 세션에 저장한다.
					
					$STreei++;						// 인증에 성공한 비밀글의 갯수를 증가시킨다.
					$STree .= $i . '|';		// 인증에 성공한 비밀글의 번호를 저장한다.
					
					$outTmp = explode('[/SECRET]', $myText[0]);
					if(eregi("<script", $outTmp[0])){
						$Secret_out .= '<!-- CHAKANI_SECRET_SCRIPT_RELOAD | '.getDefaultURL($owner).'/'.$mother.'#CHAKANI_SECRET'.$mother . '_' . $i.'|-->';
					}
					else{
						$Secret_out .= '<!-- CHAKANI_SECRET_START_' . $mother . '_' . $i .' -->';
						$Secret_out .= CHAKANI_SECRETOutForm($myText[0], $cfg, 1);
						$Secret_out .= '<!-- CHAKANI_SECRET_END_' . $mother . '_' . $i .' -->';
					}
				}
				
				// 일반적인 경우 패스워드 경고창으로 비밀글을 보호함
				else{
					$Secret_out .= CHAKANI_SECRETOutForm($myText[0], $cfg, 0);
				}
				
			}

			// [/SECRET] 뒷부분 에서 다음의 [SECRET] 사이를 본문에 넣는다.
/*
			$myText = explode("[SECRET]", $myText[1]);
			
			if($cfg['myB'] == 1) $outZtmp = '<br />';			// <br /> 인경우
			else $outZtmp = '</p>';												// </p> 인경우
			$outZa = explode($outZtmp, $myText[0]);
			$outZc = count($outZa);
			$outZ = '';
			for($k=1; $k<$outZc; $k++) $outZ .= $outZa[$k] . $outZtmp;
			
			$Secret_out .= $outZ;
*/
            $Secret_out .= $myText[1];
		}
		
		if($STreei > 0 && $CodeOK == 1) $Secret_out .= '<!-- CHAKANI_SECRET_CODE_' . $STreei . '|' .$STree . '_END -->';
		$Secret_out .= $lastOut[1];
		
		return $Secret_out;
	}
	
	return $target;
}

function CHAKANI_SECRETOutForm($myText, $cfg, $type){
	
	global $pluginURL, $hostURL, $blogURL;

	if($type == 0){
		// 패스워드를 물어보는 출력
		
		if(empty($cfg['SECRETTEXTtitle'])){
			$cfg['SECRETTEXTtitle'] = $lang2;//'비공개 글입니다. 아래 질문에 대한 답변을 입력해주세요.';
			$cfg['SECRETTEXTbg'] = '#fefdfe';
			$cfg['SECRETTEXTeg'] = 'silver';
			$cfg['SECRETTEXTtx'] = '#000';
		}
		
		$secret = ('
			<div id="CHAKANI_SECRET_'.$cfg['mother'].'_'.$cfg['i'].'">
			<br />
			<div style="color:'.$cfg['SECRETTEXTtx'].'; border:1px dashed '.$cfg['SECRETTEXTeg'].'; padding:9px; background:'.$cfg['SECRETTEXTbg'].'; text-align:center;height:60px;background-image:url('.$pluginURL.'/images/lock.png);background-repeat:no-repeat;background-position:right;">
			'.$cfg['SECRETTEXTtitle'].'<br />
			'.$cfg['myQ'].'
			<input type="text" size="15" id="CHAKANI_SECRETV_'.$cfg['mother'].'_'.$cfg['i'].'" style="background-color:'.$cfg['SECRETTEXTbg'].'; border-left-width:0pt; border-top-width:0pt; border-right-width:0pt; border-bottom-width:1pt;border-color:#ffc0c0; border-style:dashed;" onkeydown="if(event.keyCode == 13) CHAKANI_SECRET_GO(\''.$cfg['mother'].'\','.$cfg['i'].',\''.$hostURL.$blogURL.'\');">
			<img src="'.$pluginURL.'/images/ok.png" onclick="CHAKANI_SECRET_GO(\''.$cfg['mother'].'\','.$cfg['i'].',\''.$hostURL.$blogURL.'\');" style="cursor:pointer"><br />
			<div id="CHAKANI_SECRETM_'.$cfg['mother'].'_'.$cfg['i'].'" style="padding:4px;"></div>
			</div>
			<br />
			</div>
		');
		
		return $secret;
		
	}
	else if($type == 2){
		// 비밀글 완전히 감추기
		$outTmp = explode('[/SECRET]', $myText);
		return $outTmp[1];
	}
	else{
		// 인증 완료처리된 출력
		
		if($cfg['myB'] == 1) $outOP = '<br />';
		else $outOP = '</p>';
		
		$outTmp = explode('[/SECRET]', $myText);
		
		$outTmp = explode($outOP, $outTmp[0]);
		$oc = count($outTmp);
		$outTmp[0] = $outTmp[1] = $outTmp[2] = "CHAKANI_OUT_EX";
		$out = implode($outTmp, $outOP);
		$out = str_replace('CHAKANI_OUT_EX'.$outOP, '', $out);
		$out = str_replace($outOP.'CHAKANI_OUT_EX', '', $out);
		$Secret_out = '<div name="CHAKANI_SECRET'. $cfg['mother'] . '_' . $cfg['i'] .'"></div>';
		return $Secret_out.$out;
	}	
}

// 플러그인 설정 셋팅 함수
function CFG_SECRETTEXTDataSet($plugin){
	
	global $owner, $configVal, $blog;
	requireComponent('Textcube.Function.misc');
	$cfg = misc::fetchConfigVal($configVal);
	
	// 언어 파일 설정
	$langdir = ROOT . "/plugins/CHAKANI_SECRETTEXT/lang/";
	if(empty($cfg['lang'])) $lang = $blog['language'];
	else $lang = $cfg['lang'];
	
	// 언어파일을 읽어들임
	if(is_file($langdir . $lang . ".php")) include_once($langdir . $lang . ".php");
	else{
		$lang = 'ko';
		$language = '한국어';
		$lang1 = '소갯말 설정';
		$lang2 = '비공개 글입니다. 아래 질문에 대한 답변을 입력해주세요.';
		$lang3 = '비밀글에대한 색설정';
		$lang4 = '배경색';
		$lang5 = '글자색';
		$lang6 = '테두리색';
		$lang7 = 'white, black, red, blue 등과 같은 색갈이나 HTML 색상코드를 입력해주세요';
	}
	// 언어 파일들을 읽음
	$mylang = '';
	$dir = opendir($langdir);
	while($langfile = readdir($dir)){
		if(eregi(".php", $langfile)){
			$langtmp = file($langdir . $langfile);
			$language = explode("'", $langtmp[1]);
			$langtype = explode('.', $langfile);
			
			$selected = '';
			if($lang == $langtype[0]) $selected = ' checked="checked"';
			$mylang .= '<op value="'.$langtype[0].'"'.$selected.'>'.$language[1].'</op>';
		}
	}
	closedir($dir);
	if(empty($mylang)) $mylang = '<op value="ko">한국어</op>';
	
	$SECRET_cfg = NULL;
	$SECRET_cfg .= '<?xml version="1.0" encoding="utf-8"?>'.CRLF;
	$SECRET_cfg .= '<config dataValHandler="SECRETTEXTDataSet">'.CRLF;
	$SECRET_cfg .= '	<window width="500" height="500" />'.CRLF;
	$SECRET_cfg .= ('
		<fieldset legend="Language Setting" name="SECRETLang_Set">
			<field title="Language Selecte" name="lang" type="select">
					'.$mylang.'
					<caption><![CDATA[ Language Selected and Click Save Button ]]></caption>
				</field>
		</fieldset>
		<fieldset legend="'.$lang1.'" name="SECRETTEXT_Set">
			<field title="　" name="SECRETTEXTtitle" value="'.$lang2.'" size="60" type="text"></field>
		</fieldset>
		<fieldset legend="'.$lang3.'" name="SECRETTEXT_Set">
			<field title="'.$lang4.'" name="SECRETTEXTbg" value="#fefdfe" size="15" type="text"></field>
			<field title="'.$lang5.'" name="SECRETTEXTtx" value="#000" size="15" type="text"></field>
			<field title="'.$lang6.'" name="SECRETTEXTeg" value="silver" size="15" type="text">
				<caption><![CDATA[ '.$lang7.' ]]></caption>
			</field>
		</fieldset>
		');
	$SECRET_cfg .= '</config>'.CRLF;
		
	return $SECRET_cfg;
}

function SECRETTEXTDataSet($DATA){
	requireComponent('Textcube.Function.misc');
	$cfg = misc::fetchConfigVal( $DATA );
	
	return true;
}
?>
